package com.competitions.videoedithelper.dao;

import com.competitions.videoedithelper.entity.UserInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author Mapler
 */
@Repository
public interface UserInfoDao {
    /**
     * 插入新用户
     * @param loginName 登录名
     * @param loginPassword 登录密码
     * @param userName 用户名
     * @param createTime 上次登录时间
     * @param email email
     * @param tel 电话
     * @param bindingRole 绑定id
     * @param uuid uuid
     * @param roleId 身份id
     */
    void insertUser(
            @Param("loginName") String loginName,
            @Param("loginPassword") String loginPassword,
            @Param("userName") String userName,
            @Param("createTime") String createTime,
            @Param("email") String email,
            @Param("tel") String tel,
            @Param("bindingRole") int bindingRole,
            @Param("uuid") String uuid,
            @Param("roleId")int roleId
    );

    /**
     * 更新用户信息
     * @param userId 用户id
     * @param userName 用户名
     * @param email email
     * @param tel 电话
     */
    void updateUserInfo(
            @Param("userId") int userId,
            @Param("userName") String userName,
            @Param("email") String email,
            @Param("tel") String tel
    );

    /**
     * 更新用户信息
     * @param userId 用户id
     * @param lastLoginTime 上次登录时间
     * @param lastLoginIp 上次登录ip
     * @param token 令牌
     */
    void updateUserLogin(
            @Param("userId") int userId,
            @Param("lastLoginTime") String lastLoginTime,
            @Param("lastLoginIp") String lastLoginIp,
            @Param("token") String token
    );

    /**
     * 查询用户
     * @param loginName 登录名
     * @param loginPassword 登录密码
     * @param roleId 身份id 0：普通用户，1：管理员
     * @return 用户
     */
    UserInfo selectUserInfo(
            @Param("roleId")int roleId,
            @Param("loginName") String loginName,
            @Param("loginPassword") String loginPassword
    );

    /**
     * 查询用户
     * @param uid 用户id
     * @return 用户
     */
    UserInfo selectUserInfoByUid(
            @Param("userId")int uid
    );

    /**
     * 查询申请注册的用户列表
     * @return 用户列表
     */
    List<UserInfo> selectRegisterUserInfo();

    /**
     * 设置是否通过审核为“是”
     * @param userId 用户id
     */
    void updateIsExamine(@Param("userId")int userId);

    /**
     * 删掉审核不通过的注册用户
     * @param userId 用户id
     */
    void deleteRegisterUserInfo(@Param("userId")int userId);

    /**
     * 管理员查询用户列表
     * @return 用户列表
     */
    List<UserInfo> selectUsers();

    /**
     * 更新用户账号状态
     * @param userId 用户id
     */
    void updateStatus(@Param("userId")int userId,@Param("status")int status);
}
